
;; yes-or-no-p to y-or-n-p
;; (if (version< emacs-major-version "29")
;;     (fset 'yes-or-no-p 'y-or-n-p))
(setq use-short-answers t)
;; 退出Emacs时确认
(setq confirm-kill-emacs 'yes-or-no-p)
;; 关闭备份
(setq make-backup-files nil
      auto-save-default nil)
;; 关闭多编辑器同时编辑统一文件时锁文件操作
(setq create-lockfiles nil)
;; 自动刷新被修改过的文件
(global-auto-revert-mode +1)
;; 随时重新加载发生修改过的文件
(setq load-prefer-newer t)
(setq kill-buffer-delete-auto-save-files t)

;; 关闭烦人的提示
(setq visible-bell t)
(setq ring-bell-function 'ignore blink-cursor-mode nil)

;; 缩进使用空格
(setq-default indent-tabs-mode nil)
;; 缩进宽度 4个空格
(setq-default tab-width 4)

;; 最大单行字符数量
(setq-default fill-column 78)
;; 设置默认主模式
(setq default-major-mode 'markdown-mode)

;; 保存时去除行尾空格和文件后的多余空行
;; (add-hook 'write-file-hooks 'delete-trailing-whitespace)
;; 改用whitespace-mode的清除多余空格功能，见init-whitespace.el

;; 设置默认输入法为 TeX 方便输入数学符号和特殊符号
(setq default-input-method "TeX")

;; isearch
(setq isearch-lazy-count t
      lazy-count-prefix-format "%s/%s ")

;; fido-mode 与ivy冲突，使用fido时需要关闭
(fido-vertical-mode t)
(setq completion-styles '(flex substring basic))

;; ;; 正确的解析驼峰分词
;; (subword-mode t)

;; 启动智能缩进
(electric-indent-mode t)
(electric-pair-mode t)

;;使删除功能和图形界面的编辑器一致
(delete-selection-mode t)

;; 高亮对应的括号
(show-paren-mode 1)
;; 光标在括号内是也显示高亮匹配
(define-advice show-paren-function (:around (fn) fix-show-paren-function)
  "Highlight enclosing parens."
  (cond ((looking-at-p "\\s(") (funcall fn))
        (t (save-excursion
             (ignore-errors (backward-up-list))
             (funcall fn)))))

;; 保证 GUI 下 Emacs 启动时能正确的导入系统的环境变量
;; (when (memq window-system '(mac ns x))
;;   (require-package 'exec-path-from-shell)
;;     (exec-path-from-shell-initialize))

;; 开启 cua-mode 使 C-x C-c C-v 功能和现代编辑器一致，并且有更好矩形选择
(cua-mode t)

(add-hook 'after-init-hook
          (lambda ()
            (save-place-mode 1) ; 记住关闭文件时的光标位置，下次打开时自动回到该位置
            (winner-mode 1) ; 窗口布局恢复
            ;; revert 保存编辑文件记录
            (recentf-mode 1)
            (setq recentf-max-menu-items 30
                  recentf-max-saved-items 100)
            ;; (recentf-open-files) ; 启动完成好显示 recentf window
            ))

;; 对所有代码编辑模式开启代码折叠
(add-hook 'prog-mode-hook 'hs-minor-mode)

;; (desktop-save-mode t)

(provide 'init-base)
